package com.zhouxiaoge.mybatis.dao;

import com.zhouxiaoge.mybatis.bean.Employee;
import org.apache.ibatis.annotations.MapKey;
import org.apache.ibatis.annotations.Param;

import java.util.List;
import java.util.Map;

/**
 * @author 周小哥
 * 时间 ： 2019/8/6 13:23
 */
public interface EmployeeMapper {

    /**
     * 根据主键id查询Employee信息
     *
     * @param id 主键id
     * @return Employee信息
     */
    Employee selectById(Integer id);

    /**
     * 新增employee
     *
     * @param employee employee信息
     * @return 执行结果
     */
    Long addEmp(Employee employee);

    /**
     * 修改employee
     *
     * @param employee employee信息
     * @return 执行结果
     */
    boolean updateEmp(Employee employee);

    /**
     * 删除employee
     *
     * @param id 主键id
     * @return 执行结果
     */
    boolean deleteEmpById(Integer id);

    /**
     * 参数是map的查询
     *
     * @param map map类型的参数
     * @return 执行结果
     */
    Employee getEmpByMap(Map<String, Object> map);

    /**
     * 多个参数绑定查询
     *
     * @param id       参数一：主键id
     * @param lastName 参数二：姓名
     * @return 执行结果
     */
    Employee getEmpByIdAndLastName(@Param("id") Integer id, @Param("lastName") String lastName);

    /**
     * 返回结果是集合的查询
     *
     * @param lastName 参数一：姓名
     * @return 执行结果
     */
    List<Employee> getEmpsByLastNameLike(String lastName);

    /**
     * 返回一条记录的map；key就是列名，值就是对应的值
     *
     * @param id 参数一：主键id
     * @return 执行结果
     */
    Map<String, Object> getEmpByIdReturnMap(Integer id);

    /**
     * 多条记录封装一个map：Map<Integer,Employee>:键是这条记录的主键，值是记录封装后的javaBean
     * MapKey: 告诉mybatis封装这个map的时候使用哪个属性作为map的key
     *
     * @param lastName 参数一：姓名
     * @return 执行结果
     */
    @MapKey("lastName")
    Map<String, Employee> getEmpByLastNameLikeReturnMap(String lastName);
}
